package br.com.cqipac.action;

import java.util.List;

import javax.naming.Context;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.interceptor.ServletRequestAware;

import br.com.cqipac.ejb.BeanFactory;
import br.com.cqipac.ejb.FacadeIpacRemote;
import br.com.cqipac.to.Funcionario;
import br.com.cqipac.to.Setor;
import br.com.cqipac.to.SetorFuncionario;
import br.com.cqipac.to.SetorFuncionarioId;
import br.com.cqipac.util.TrataErro;

import com.opensymphony.xwork2.ActionSupport;

public class SetorFuncionarioAction extends ActionSupport implements
		ServletRequestAware {

	private static final long serialVersionUID = 1L;
	private HttpServletRequest request;
	private HttpSession session;
	private Funcionario funcionario;
	private Funcionario funcionarioInclusao;
	private List<Funcionario> funcionarios;
	private Setor setor;
	private List<Setor> setores;
	private SetorFuncionario setorFuncionario;

	public String cadastra() throws Exception {

		FacadeIpacRemote facadeIpac;

		facadeIpac = BeanFactory.getFacadeIpacRemoteBean();

		funcionarios = facadeIpac.listaFuncionarios();

		setores = facadeIpac.listaSetores(new Setor());

		return "sucesso";
	}

	public String salva() throws Exception {

		funcionarioInclusao = ((SetorFuncionario) session
				.getAttribute("setorFuncionario"))
				.getFuncionarioByCodFuncionario();

		try {

			FacadeIpacRemote facadeIpac;
			facadeIpac = BeanFactory.getFacadeIpacRemoteBean();
			
			//facadeIpac.listaSetorFuncionario(new SetorFuncionario());
			
			setorFuncionario.setFuncionarioByCodFuncionarioInclusao(funcionarioInclusao);

			setorFuncionario.setId(new SetorFuncionarioId(setorFuncionario.getSetor().getCodSetor(),setorFuncionario.getFuncionarioByCodFuncionario().getCodFuncionario()));
			
			facadeIpac.insereSetorFuncionario(setorFuncionario);

		} catch (java.lang.Exception e) {
			session.setAttribute("erro", TrataErro.mensagem(e));
				return "erro";
		}

		return "sucesso";
	}
	
	public String busca() throws Exception {

		FacadeIpacRemote facadeIpac;

		facadeIpac = BeanFactory.getFacadeIpacRemoteBean();

		funcionarios = facadeIpac.listaFuncionarios();

		setores = facadeIpac.listaSetores(new Setor());

		return "sucesso";
	}

	public String lista() {

		FacadeIpacRemote facadeIpac;

		facadeIpac = BeanFactory.getFacadeIpacRemoteBean();

		if (funcionario == null) {
			funcionario = new Funcionario();
		}
		try {
			funcionarios = facadeIpac.listaFuncionarios(funcionario);
		} catch (Exception e) {
			session.setAttribute("erro", e.toString());
		}

		return "sucesso";
	}

	public String edita() {

		FacadeIpacRemote facadeIpac;
		facadeIpac = BeanFactory.getFacadeIpacRemoteBean();

		try {
			funcionarios = facadeIpac.listaFuncionarios();
			funcionario = facadeIpac.buscaFuncionario(Integer.parseInt(request
					.getParameter("codigo")));
		} catch (java.lang.Exception e) {
			session.setAttribute("erro", TrataErro.mensagem(e));
		}

		return "sucesso";
	}

	public String exclui() {

		FacadeIpacRemote facadeIpac;
		facadeIpac = BeanFactory.getFacadeIpacRemoteBean();

		try {

			funcionario = new Funcionario();
			funcionario.setCodFuncionario(Integer.parseInt(request
					.getParameter("codigo")));

			facadeIpac.excluirFuncionario(funcionario);
		} catch (java.lang.Exception e) {
			session.setAttribute("erro", TrataErro.mensagem(e));
		}

		return "sucesso";
	}

	public Funcionario getFuncionario() {
		return funcionario;
	}

	public void setFuncionario(Funcionario funcionario) {
		this.funcionario = funcionario;
	}

	public List<Funcionario> getFuncionarios() {
		return funcionarios;
	}

	public void setFuncionarios(List<Funcionario> funcionarios) {
		this.funcionarios = funcionarios;
	}

	public Setor getSetor() {
		return setor;
	}

	public void setSetor(Setor setor) {
		this.setor = setor;
	}

	public List<Setor> getSetores() {
		return setores;
	}

	public void setSetores(List<Setor> setores) {
		this.setores = setores;
	}

	@Override
	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
		this.session = request.getSession();
	}

	public static Context getInitialContext()
			throws javax.naming.NamingException {
		return new javax.naming.InitialContext();
	}

	public SetorFuncionario getSetorFuncionario() {
		return setorFuncionario;
	}

	public void setSetorFuncionario(SetorFuncionario setorFuncionario) {
		this.setorFuncionario = setorFuncionario;
	}

}
